package parcview.interfaces;

/**
 * Stellt den Zustand der Simulation dar und kapselt die Logik. Es werden einige
 * Getter zur Verf�gung gestellt, mit denen die GUI arbeiten kann.
 */
public interface SimulationIF {
	
	/**
	 * Alle m�glichen Getter, um an die Informationen �ber den derzeitigen Zustand der Simulation
	 * zu kommen.
	 * @return
	 */
	public long getGlobalTime();	
	public WaitingQueueIF getWAITING_QUEUE();
	public ConstructionIF getCONSTRUCTION();
	public ParkingLotIF getPARKING_LOT();
	public int getTA1();	
	public int getTA2();	
	public int getTE1();
	public int getTE2();	
	public int getTB();	
	public int getN();
        public String getAlgoName();
	
	/**
	 * Gibt die GlobalTime umgerechnet auf eine normale Tageszeit zur�ck. Die Stunde bei der
	 * die Zeit beginnen soll ist in Simulation als Konstante gespeichert.
	 * 
	 * @return String (hh.mm)
	 */
	public String getDayTime();
        public String getCloseTime();
	
	/**
	 * Generiert eine zuf�llige Abfahrtszeit f�r Autos, die auf dem Parkplatz einparken.
	 * Diese liegt zwischen te1 und te2.
	 * @return long
	 */
	public long generateTimeToLeave();
	
	/**
	 * Berechnet den n�chsten Schritt der Simulation. Hier passiert die
	 * eigentliche Magic, also der Algorithmus, der entscheidet, welches Auto
	 * fahren darf und was pro Schritt alles passieren muss.
	 * 
	 * @return true, wenn die Sumulation noch nicht beendet wurde, false, wenn
	 * die Simulation zuende ist.
	 */
	public boolean nextStep();
}
